/**
 * 
 */
package bean;

import java.sql.SQLException;
import java.text.ParseException;
import java.util.Date;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.servlet.http.HttpServletRequest;

import org.richfaces.component.UISelect;

import DAO.EvolucaoClinicaDAO;
import DAO.PacienteDAO;
import Model.EvolucaoClinica;
import Model.Paciente;
import Utils.Uteis;

/**
 * @author jhonny
 *
 */
public class EvolucaoClinicaBean {
	private int idEvolucaoClinica;
	private java.util.Date dataEvolucao;
	private String assunto;
	private String observacao;
	private String area;
	private int idPaciente;
	
	private UISelect idPacienteValidation; 
	
	public UISelect getIdPacienteValidation() {
		return idPacienteValidation;
	}
	public void setIdPacienteValidation(UISelect idPacienteValidation) {
		this.idPacienteValidation = idPacienteValidation;
	}
	public java.util.Date getDataEvolucao() {
		return dataEvolucao;
	}
	public void setDataEvolucao(Date dataEvolucao) {
		this.dataEvolucao = dataEvolucao;
	}
	public String getAssunto() {
		return assunto;
	}
	public void setAssunto(String assunto) {
		this.assunto = assunto;
	}
	public String getArea() {
		return area;
	}
	public void setArea(String area) {
		this.area = area;
	}
	public String getObservacao() {
		return observacao;
	}
	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}
	public int getIdPaciente() {
		return idPaciente;
	}
	public void setIdPaciente(int idPaciente) {
		this.idPaciente = idPaciente;
	}
	public int getIdEvolucaoClinica() {
		return idEvolucaoClinica;
	}
	public void setIdEvolucaoClinica(int idEvolucaoClinica) {
		this.idEvolucaoClinica = idEvolucaoClinica;
	}
	
	public String Salvar(){
		
		try
		{
			java.sql.Date _dataEvolucao = Uteis.javaDate2SqlDate(dataEvolucao);			
			
			EvolucaoClinica ev = new EvolucaoClinica();			
			ev.setDataEvolucao(_dataEvolucao);
			ev.setAssunto(this.assunto);
			ev.setArea(this.area);
			ev.setIdPaciente(this.idPaciente);
			ev.setObservacao(this.observacao);
			
			if(this.idEvolucaoClinica > 0)
			{
				ev.setIdEvolucaoClinica(this.idEvolucaoClinica);
				EvolucaoClinicaDAO.Update(ev);
			}
			else
				EvolucaoClinicaDAO.Insert(ev);			
			
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Informações Salvas com sucesso"));			
		}
		catch(Exception sexc)
		{
			sexc.printStackTrace();
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao salvar as informações, contate o administrador do sistema"));
		}		
		return "evolucao_list";	
	}
	
	public String Editar()
	{
		HttpServletRequest resquest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
		int idEvolucao = Integer.parseInt(resquest.getParameter("idevolucao"));
		try {
			EvolucaoClinica evolucao = EvolucaoClinicaDAO.LoadObject(idEvolucao);
			this.idEvolucaoClinica = evolucao.getIdEvolucaoClinica();
			this.dataEvolucao = evolucao.getDataEvolucao();
			this.assunto = evolucao.getAssunto();
			this.area = evolucao.getArea();
			this.idPaciente = evolucao.getIdPaciente();
			this.observacao = evolucao.getObservacao();			
			return "evolucao_edit";
		} 
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		return "evolucao_list";
	}
	
	public String Inativar()
	{
		HttpServletRequest resquest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
		int idEvolucao = Integer.parseInt(resquest.getParameter("idevolucao"));
		FacesContext facesContext = FacesContext.getCurrentInstance();
		try
		{
			EvolucaoClinicaDAO.InativarEvolucaoClinica(idEvolucao);
			facesContext.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Informações Inativadas com sucesso"));
		}
		catch(SQLException ex)
		{
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao inativar as informações, contate o administrador do sistema"));
		}		
		return "evolucao_list";
	}
	
	public void validateData(FacesContext context, UIComponent uicomponent, Object value)
	{
		Date dataSel = (Date) value;		

		try {
			if(dataSel.after(new Date()))
			{
				((UIInput)uicomponent).setValid(false);
				FacesMessage message = new FacesMessage();
				message.setDetail("A data não pode estar no futuro!");        	
				message.setSeverity(FacesMessage.SEVERITY_ERROR);	        
				throw new ValidatorException(message);
			}	
			else
			{
				Object idPacienteSelect = this.idPacienteValidation.getLocalValue();	
				if(idPacienteSelect != null)
				{
					int idPacienteSel = Integer.parseInt(this.idPacienteValidation.getLocalValue().toString());
					Paciente paciente = PacienteDAO.LoadObject(idPacienteSel);
					if(dataSel.before(paciente.getDataNascimento()))
					{
						String data = Uteis.formatarData(paciente.getDataNascimento());
						((UIInput)uicomponent).setValid(false);
						FacesMessage message = new FacesMessage();					
						message.setDetail("A data não pode ser menor que "+ data +" que é data de nascimento do paciente! ");
						message.setSeverity(FacesMessage.SEVERITY_ERROR);	        
						throw new ValidatorException(message);
					}						
				}
				else
				{
					((UIInput)uicomponent).setValid(false);
				}
			}	
			
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
